//栈排序。 编写程序，对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据，但不得将元素复制到别的数据结构（如数组）中。该栈支持如下操作：
//push、pop、peek 和 isEmpty。当栈为空时，peek 返回 -1。 
//
// 示例 1： 
//
// 
// 输入：
//["SortedStack", "push", "push", "peek", "pop", "peek"]
//[[], [1], [2], [], [], []]
// 输出：
//[null,null,null,1,null,2]
// 
//
// 示例 2： 
//
// 
// 输入： 
//["SortedStack", "pop", "pop", "push", "pop", "isEmpty"]
//[[], [], [], [1], [], []]
// 输出：
//[null,null,null,null,null,true]
// 
//
// 提示： 
//
// 
// 栈中的元素数目在[0, 5000]范围内。 
// 
//
// Related Topics 栈 设计 单调栈 👍 111 👎 0


package LeetCode.editor.cn;

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * @author ldltd
 * @date 2025-06-24 22:58:09
 * @description 面试题 03.05.栈排序
 */
public class SortOfStacksLcci{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 SortOfStacksLcci fun=new SortOfStacksLcci();


	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class SortedStack {
        Deque<Integer> st;
    public SortedStack() {
        st=new ArrayDeque<>();
    }
    
    public void push(int val) {
        Deque<Integer> tem=new ArrayDeque<>();
        while (!st.isEmpty()&&st.peek()<val){
            tem.push(st.pop());
        }
        st.push(val);
        while (!tem.isEmpty())
            st.push(tem.pop());
    }
    
    public void pop() {
        if (!st.isEmpty())
        st.pop();
    }
    
    public int peek() {
        return st.isEmpty()?-1:st.peek();
    }
    
    public boolean isEmpty() {
        return st.isEmpty();
    }
}

/**
 * Your SortedStack object will be instantiated and called as such:
 * SortedStack obj = new SortedStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.peek();
 * boolean param_4 = obj.isEmpty();
 */
//leetcode submit region end(Prohibit modification and deletion)

}
